package conservare.boleto;

import org.apache.commons.lang.StringUtils;
import org.jrimum.domkee.financeiro.banco.febraban.Carteira;
import org.jrimum.domkee.financeiro.banco.febraban.Modalidade;
import org.jrimum.domkee.financeiro.banco.febraban.TipoDeCobranca;

import conservare.modelo.boleto.BoletoEmitido;
import conservare.util.UtilitarioString;

public class GeradorBoletoCefCarteira24 extends GeradorBoletoCef {

	
	public GeradorBoletoCefCarteira24(BoletoEmitido infoBoleto, conservare.modelo.banco.CarteiraBoleto carteiraBoleto) {

		super(infoBoleto,carteiraBoleto);
	
	}


	protected Carteira getBopepoCarteira(){
		
		return new Carteira(24, TipoDeCobranca.SEM_REGISTRO);
	}
	
	protected Modalidade getBopepoModalidadeConta(){
		return  new Modalidade(4);
	}
	
	
	protected String getNumeroDoDocumento(){
		return StringUtils.leftPad(String.valueOf(infoBoleto.getNumeroDoDocumento()), 11, "0");
	}
	
	
	protected String getSequencialNossoNumero(){
		return StringUtils.leftPad(String.valueOf(infoBoleto.getNumeroDoDocumento()), 15, "0");
	}
	
	
	protected String getNossoNumero(){
		return "24" + getSequencialNossoNumero();
	}
	
	/*
     * A área do boleto destinada ao "Nosso Número" deverá exibir a informação
     * "Código da Carteira/Nosso Número". Ex: 109/1234567-8.
     */
	public String getNossoNumeroParaExibicao(){
		String nossoNumeroParaExibicao = String.format("%s/%s-%s", 
				carteiraBoleto.getNumeroCarteira() + carteiraBoleto.getModalidade(),
        		getSequencialNossoNumero(),
        		calculaDigitoNossoNumero(getNossoNumero())); 
		return nossoNumeroParaExibicao;
	}
	
	
	protected String calculaDigitoNossoNumero(String nossoNumero){
        return UtilitarioString.calculeDVModulo11(nossoNumero) + "";
	}
	
	protected String getDescricaoCarteiraParaExibicao(){
		return "SR";
	}
}
